Resource sharing is common in computing systems, where multiple data processing tasks may attempt to access the same set of data. For example, a network interface controller such as an Ethernet controller may execute multiple packet processing tasks of transmitting and/or receiving data packets over a network. The processing of each data packet may require accessing the same set of context data needed to process each packet. As another example, a computer processor may execute multiple processor instructions. The execution of the processor instructions may require accessing the same set of registers. Data contention may arise when multiple processing tasks attempt to access the same shared information simultaneously. In scenarios where multiple processing tasks are involved in updating and reading of the same shared information, a data coherency problem may also arise when, for example, a processing task fails to use the most updated version of the shared information.